using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

/*
 * Nombre archivo: cat_jornadaBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla cat_jornada, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha: 27/08/2011 18:01:46
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class cat_jornadaBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "cat_jornada", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "cat_jornada", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(cat_jornada datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO cat_jornada (tipo_jor,hora_ini_matutina,hora_fin_matutina,hora_ini_vespertina,hora_fin_vespertina,hora_ini_nocturna,hora_fin_nocturna,hora_ini_madrugada,hora_fin_madrugada,nro_dias) VALUES (?tipo_jor,?hora_ini_matutina,?hora_fin_matutina,?hora_ini_vespertina,?hora_fin_vespertina,?hora_ini_nocturna,?hora_fin_nocturna,?hora_ini_madrugada,?hora_fin_madrugada,?nro_dias);";
				string strConectionUpdate = "UPDATE cat_jornada SET tipo_jor = ?tipo_jor,hora_ini_matutina = ?hora_ini_matutina,hora_fin_matutina = ?hora_fin_matutina,hora_ini_vespertina = ?hora_ini_vespertina,hora_fin_vespertina = ?hora_fin_vespertina,hora_ini_nocturna = ?hora_ini_nocturna,hora_fin_nocturna = ?hora_fin_nocturna,hora_ini_madrugada = ?hora_ini_madrugada,hora_fin_madrugada = ?hora_fin_madrugada,nro_dias = ?nro_dias WHERE id_jor=?id_jor;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlId_jor = new MySqlParameter("?id_jor", MySqlDbType.Int32);
				MySqlParameter psqlTipo_jor = new MySqlParameter("?tipo_jor", MySqlDbType.VarChar,50);
				MySqlParameter psqlHora_ini_matutina = new MySqlParameter("?hora_ini_matutina", MySqlDbType.Datetime);
				MySqlParameter psqlHora_fin_matutina = new MySqlParameter("?hora_fin_matutina", MySqlDbType.Datetime);
				MySqlParameter psqlHora_ini_vespertina = new MySqlParameter("?hora_ini_vespertina", MySqlDbType.Datetime);
				MySqlParameter psqlHora_fin_vespertina = new MySqlParameter("?hora_fin_vespertina", MySqlDbType.Datetime);
				MySqlParameter psqlHora_ini_nocturna = new MySqlParameter("?hora_ini_nocturna", MySqlDbType.Datetime);
				MySqlParameter psqlHora_fin_nocturna = new MySqlParameter("?hora_fin_nocturna", MySqlDbType.Datetime);
				MySqlParameter psqlHora_ini_madrugada = new MySqlParameter("?hora_ini_madrugada", MySqlDbType.Datetime);
				MySqlParameter psqlHora_fin_madrugada = new MySqlParameter("?hora_fin_madrugada", MySqlDbType.Datetime);
				MySqlParameter psqlNro_dias = new MySqlParameter("?nro_dias", MySqlDbType.Int32);

				psqlId_jor.Value = datos.Id_jor;
				psqlTipo_jor.Value = datos.Tipo_jor;
				psqlHora_ini_matutina.Value = datos.Hora_ini_matutina;
				psqlHora_fin_matutina.Value = datos.Hora_fin_matutina;
				psqlHora_ini_vespertina.Value = datos.Hora_ini_vespertina;
				psqlHora_fin_vespertina.Value = datos.Hora_fin_vespertina;
				psqlHora_ini_nocturna.Value = datos.Hora_ini_nocturna;
				psqlHora_fin_nocturna.Value = datos.Hora_fin_nocturna;
				psqlHora_ini_madrugada.Value = datos.Hora_ini_madrugada;
				psqlHora_fin_madrugada.Value = datos.Hora_fin_madrugada;
				psqlNro_dias.Value = datos.Nro_dias;

				if (!Existe("id_jor=" + datos.Id_jor))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlId_jor
							, psqlTipo_jor
							, psqlHora_ini_matutina
							, psqlHora_fin_matutina
							, psqlHora_ini_vespertina
							, psqlHora_fin_vespertina
							, psqlHora_ini_nocturna
							, psqlHora_fin_nocturna
							, psqlHora_ini_madrugada
							, psqlHora_fin_madrugada
							, psqlNro_dias
							);
					MessageBox.Show("Se grabo [cat_jornada] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlId_jor
							, psqlTipo_jor
							, psqlHora_ini_matutina
							, psqlHora_fin_matutina
							, psqlHora_ini_vespertina
							, psqlHora_fin_vespertina
							, psqlHora_ini_nocturna
							, psqlHora_fin_nocturna
							, psqlHora_ini_madrugada
							, psqlHora_fin_madrugada
							, psqlNro_dias
							);
					MessageBox.Show("Se actualizó [cat_jornada] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(cat_jornada datos)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				string filtro = string.Format("id_jor='{0}'", datos.Id_jor);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("cat_jornada"
						, new CampoValor("tipo_jor", datos.Tipo_jor)
						, new CampoValor("hora_ini_matutina",ValidarBuilder.FormatoFecha( datos.Hora_ini_matutina))
						, new CampoValor("hora_fin_matutina",ValidarBuilder.FormatoFecha( datos.Hora_fin_matutina))
						, new CampoValor("hora_ini_vespertina",ValidarBuilder.FormatoFecha( datos.Hora_ini_vespertina))
						, new CampoValor("hora_fin_vespertina",ValidarBuilder.FormatoFecha( datos.Hora_fin_vespertina))
						, new CampoValor("hora_ini_nocturna",ValidarBuilder.FormatoFecha( datos.Hora_ini_nocturna))
						, new CampoValor("hora_fin_nocturna",ValidarBuilder.FormatoFecha( datos.Hora_fin_nocturna))
						, new CampoValor("hora_ini_madrugada",ValidarBuilder.FormatoFecha( datos.Hora_ini_madrugada))
						, new CampoValor("hora_fin_madrugada",ValidarBuilder.FormatoFecha( datos.Hora_fin_madrugada))
						, new CampoValor("nro_dias", datos.Nro_dias.ToString())
						);
					MessageBox.Show("Se grabo [cat_jornada] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("cat_jornada", filtro
						, new CampoValor("tipo_jor", datos.Tipo_jor)
						, new CampoValor("hora_ini_matutina",ValidarBuilder.FormatoFecha( datos.Hora_ini_matutina))
						, new CampoValor("hora_fin_matutina",ValidarBuilder.FormatoFecha( datos.Hora_fin_matutina))
						, new CampoValor("hora_ini_vespertina",ValidarBuilder.FormatoFecha( datos.Hora_ini_vespertina))
						, new CampoValor("hora_fin_vespertina",ValidarBuilder.FormatoFecha( datos.Hora_fin_vespertina))
						, new CampoValor("hora_ini_nocturna",ValidarBuilder.FormatoFecha( datos.Hora_ini_nocturna))
						, new CampoValor("hora_fin_nocturna",ValidarBuilder.FormatoFecha( datos.Hora_fin_nocturna))
						, new CampoValor("hora_ini_madrugada",ValidarBuilder.FormatoFecha( datos.Hora_ini_madrugada))
						, new CampoValor("hora_fin_madrugada",ValidarBuilder.FormatoFecha( datos.Hora_fin_madrugada))
						, new CampoValor("nro_dias", datos.Nro_dias.ToString())
						);
					MessageBox.Show("Se actualizó [cat_jornada] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static cat_jornada Recuperar(string filtro)
		{
			cat_jornada r = new cat_jornada();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_jor = Convert.ToInt32(ds.Rows[0]["id_jor"]);
					if (ds.Rows[0]["tipo_jor"] != System.DBNull.Value)
						r.Tipo_jor = ds.Rows[0]["tipo_jor"].ToString();
					if (ds.Rows[0]["tipo_jor"] == System.DBNull.Value)
						r.Tipo_jor = "";
					if (ds.Rows[0]["hora_ini_matutina"] != System.DBNull.Value)
						r.Hora_ini_matutina = Convert.ToDateTime(ds.Rows[0]["hora_ini_matutina"]);
					if (ds.Rows[0]["hora_ini_matutina"] == System.DBNull.Value)
						r.Hora_ini_matutina = DateTime.Now;
					if (ds.Rows[0]["hora_fin_matutina"] != System.DBNull.Value)
						r.Hora_fin_matutina = Convert.ToDateTime(ds.Rows[0]["hora_fin_matutina"]);
					if (ds.Rows[0]["hora_fin_matutina"] == System.DBNull.Value)
						r.Hora_fin_matutina = DateTime.Now;
					if (ds.Rows[0]["hora_ini_vespertina"] != System.DBNull.Value)
						r.Hora_ini_vespertina = Convert.ToDateTime(ds.Rows[0]["hora_ini_vespertina"]);
					if (ds.Rows[0]["hora_ini_vespertina"] == System.DBNull.Value)
						r.Hora_ini_vespertina = DateTime.Now;
					if (ds.Rows[0]["hora_fin_vespertina"] != System.DBNull.Value)
						r.Hora_fin_vespertina = Convert.ToDateTime(ds.Rows[0]["hora_fin_vespertina"]);
					if (ds.Rows[0]["hora_fin_vespertina"] == System.DBNull.Value)
						r.Hora_fin_vespertina = DateTime.Now;
					if (ds.Rows[0]["hora_ini_nocturna"] != System.DBNull.Value)
						r.Hora_ini_nocturna = Convert.ToDateTime(ds.Rows[0]["hora_ini_nocturna"]);
					if (ds.Rows[0]["hora_ini_nocturna"] == System.DBNull.Value)
						r.Hora_ini_nocturna = DateTime.Now;
					if (ds.Rows[0]["hora_fin_nocturna"] != System.DBNull.Value)
						r.Hora_fin_nocturna = Convert.ToDateTime(ds.Rows[0]["hora_fin_nocturna"]);
					if (ds.Rows[0]["hora_fin_nocturna"] == System.DBNull.Value)
						r.Hora_fin_nocturna = DateTime.Now;
					if (ds.Rows[0]["hora_ini_madrugada"] != System.DBNull.Value)
						r.Hora_ini_madrugada = Convert.ToDateTime(ds.Rows[0]["hora_ini_madrugada"]);
					if (ds.Rows[0]["hora_ini_madrugada"] == System.DBNull.Value)
						r.Hora_ini_madrugada = DateTime.Now;
					if (ds.Rows[0]["hora_fin_madrugada"] != System.DBNull.Value)
						r.Hora_fin_madrugada = Convert.ToDateTime(ds.Rows[0]["hora_fin_madrugada"]);
					if (ds.Rows[0]["hora_fin_madrugada"] == System.DBNull.Value)
						r.Hora_fin_madrugada = DateTime.Now;
					r.Nro_dias = Convert.ToInt32(ds.Rows[0]["nro_dias"]);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("cat_jornada", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmbcat_jornada, string filtro, string nombre_display)
		{
			cmbcat_jornada.DataSource = ListarTodos(filtro);
			cmbcat_jornada.DisplayMember = nombre_display;
			cmbcat_jornada.ValueMember = "id_jor";
		}

		public static DataTable ListarTodos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("id_jor AS id_jor,tipo_jor AS tipo_jor,hora_ini_matutina AS hora_ini_matutina,hora_fin_matutina AS hora_fin_matutina,hora_ini_vespertina AS hora_ini_vespertina,hora_fin_vespertina AS hora_fin_vespertina,hora_ini_nocturna AS hora_ini_nocturna,hora_fin_nocturna AS hora_fin_nocturna,hora_ini_madrugada AS hora_ini_madrugada,hora_fin_madrugada AS hora_fin_madrugada,nro_dias AS nro_dias", "cat_jornada", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static List<cat_jornada> ListarTodos_List(string filtro)
		{
			List<cat_jornada> r = new List<cat_jornada>();
			try
			{
				DataTable dt = ListarTodos(filtro);
				for (int i = 0; i < dt.Rows.Count; i++)
					r.Add(Recuperar("id_jor="+dt.Rows[i]["id_jor"]));
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static cat_jornada valida_campos_cat_jornada(Control ctrl_id_jor,TextBox txt_tipo_jor,DateTime dpk_hora_ini_matutina,DateTime dpk_hora_fin_matutina,DateTime dpk_hora_ini_vespertina,DateTime dpk_hora_fin_vespertina,DateTime dpk_hora_ini_nocturna,DateTime dpk_hora_fin_nocturna,DateTime dpk_hora_ini_madrugada,DateTime dpk_hora_fin_madrugada,Control ctrl_nro_dias)
		{
			bool r = true;
			cat_jornada new_cat_jornada = new cat_jornada();
			try
			{
				if(ctrl_id_jor.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_jor = (TextBox)ctrl_id_jor;
					if (txt_id_jor.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_jor","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_jor.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_jor","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_cat_jornada.Id_jor = Convert.ToInt32(txt_id_jor.Text);
				}
				if(ctrl_id_jor.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_jor = (ComboBox)ctrl_id_jor;
					if (cmb_id_jor.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_jor","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_cat_jornada.Id_jor = Convert.ToInt32(cmb_id_jor.SelectedValue);
				}
				if (txt_tipo_jor.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la tipo_jor","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_cat_jornada.Tipo_jor = txt_tipo_jor.Text;
				if (r)
					new_cat_jornada.Hora_ini_matutina = dpk_hora_ini_matutina;
				if (r)
					new_cat_jornada.Hora_fin_matutina = dpk_hora_fin_matutina;
				if (r)
					new_cat_jornada.Hora_ini_vespertina = dpk_hora_ini_vespertina;
				if (r)
					new_cat_jornada.Hora_fin_vespertina = dpk_hora_fin_vespertina;
				if (r)
					new_cat_jornada.Hora_ini_nocturna = dpk_hora_ini_nocturna;
				if (r)
					new_cat_jornada.Hora_fin_nocturna = dpk_hora_fin_nocturna;
				if (r)
					new_cat_jornada.Hora_ini_madrugada = dpk_hora_ini_madrugada;
				if (r)
					new_cat_jornada.Hora_fin_madrugada = dpk_hora_fin_madrugada;
				if(ctrl_nro_dias.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_nro_dias = (TextBox)ctrl_nro_dias;
					if (txt_nro_dias.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_dias","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_nro_dias.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la nro_dias","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_cat_jornada.Nro_dias = Convert.ToInt32(txt_nro_dias.Text);
				}
				if(ctrl_nro_dias.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_nro_dias = (ComboBox)ctrl_nro_dias;
					if (cmb_nro_dias.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_dias","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_cat_jornada.Nro_dias = Convert.ToInt32(cmb_nro_dias.SelectedValue);
				}

				if(!r)
					new_cat_jornada = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_cat_jornada;
		}

		public static void grabar_actualizar_registro(Control ctrl_id_jor,TextBox txt_tipo_jor,DateTime dpk_hora_ini_matutina,DateTime dpk_hora_fin_matutina,DateTime dpk_hora_ini_vespertina,DateTime dpk_hora_fin_vespertina,DateTime dpk_hora_ini_nocturna,DateTime dpk_hora_fin_nocturna,DateTime dpk_hora_ini_madrugada,DateTime dpk_hora_fin_madrugada,Control ctrl_nro_dias)
		{
			try
			{
				cat_jornada new_cat_jornada =valida_campos_cat_jornada(ctrl_id_jor,txt_tipo_jor,dpk_hora_ini_matutina,dpk_hora_fin_matutina,dpk_hora_ini_vespertina,dpk_hora_fin_vespertina,dpk_hora_ini_nocturna,dpk_hora_fin_nocturna,dpk_hora_ini_madrugada,dpk_hora_fin_madrugada,ctrl_nro_dias); 
				if(new_cat_jornada!=null)
					GrabarViaSql(new_cat_jornada);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#endregion

	}
}
